window.addEventListener('DOMContentLoaded', function () {
  const leftbar = document.querySelector('.gc-account-leftbar');
  const htmlElement = document.documentElement;

  if (leftbar) {
    htmlElement.classList.add('with-leftbar');
  } else {
    htmlElement.classList.add('without-leftbar');
  }
});

window.addEventListener('DOMContentLoaded', function () {
  const talksButton = document.querySelector('.talks-widget-button');
  const bodyElement = document.body;

  // Функция для удаления класса overflow-hidden при клике на .btn-close
  function removeOverflowHidden() {
    const closeButton = document.querySelector('.talks-widget-header .btn-close');
    if (closeButton) {
      closeButton.addEventListener('click', function () {
        bodyElement.classList.remove('overflow-hidden');
      });
    }
  }

  // Добавляем класс 'overflow-hidden' по клику на .talks-widget-button
  if (talksButton) {
    talksButton.addEventListener('click', function () {
      bodyElement.classList.add('overflow-hidden');

      // Пытаемся найти и добавить обработчик для кнопки .btn-close после её появления
      removeOverflowHidden();
    });
  }
});


document.addEventListener('DOMContentLoaded', () => {
  if (true) {
    // ТРЕНИНГ: класс для html 
    // Находим элемент с классом breadcrumbs
    const breadcrumbs = document.querySelector('.breadcrumbs');
    // Проверяем, существует ли элемент breadcrumbs
    if (breadcrumbs) {
      // Находим все ссылки внутри breadcrumbs
      const links = breadcrumbs.querySelectorAll('a');

      // Если в breadcrumbs только одна ссылка
      if (links.length === 1) {
        // Добавляем класс для тега <html>
        document.documentElement.classList.add('training-1-level');
      }

      if (links.length === 2) {
        // Добавляем класс для тега <html>
        document.documentElement.classList.add('training-2-level');
      }

      if (links.length === 3) {
        // Добавляем класс для тега <html>
        document.documentElement.classList.add('training-3-level');
      }
    }

    if (location.pathname.match(/teach\/control/) != null) { // Для страницы Статистики уроков
      document.documentElement.classList.add('training');
    }

    // ТРЕНИНГ: вставляем фотки из приложения
    const trainingTable = document.querySelector('.xdget-trainingList .stream-table');
    if (trainingTable) {
      const trainingRows = trainingTable.querySelectorAll('tr');

      trainingRows.forEach(row => {
        const link = row.querySelector('td a');
        const hasImageAttr = row.hasAttribute('data-training-image');
        const imageUrl = hasImageAttr ? row.getAttribute('data-training-image') : null;

        const div = document.createElement('div');

        // Добавление класса в зависимости от наличия изображения
        div.className = hasImageAttr && imageUrl ? 'image' : 'image without-img';

        // Установка фонового изображения, если оно есть
        if (imageUrl) {
          div.style.backgroundImage = `url("${imageUrl}")`;
        }

        link.prepend(div);
      });
    }

    // ТРЕНИНГ: добавляем класс для количества уроков и описания тренинга
    const trainingsDescription = document.querySelectorAll(
      ".xdget-trainingList tr a .stream-title + div"
    );

    if (trainingsDescription) {
      trainingsDescription.forEach((t) => {
        // Добавляем класс 'description-of-training'
        t.classList.add("description-of-training");

        // Создаем новый элемент, чтобы обернуть текст
        const newContent = document.createElement('span');

        // Проходим по дочерним узлам
        t.childNodes.forEach((node) => {
          if (node.nodeType === Node.TEXT_NODE) {
            // Если текст не пустой, оборачиваем его в <span>
            if (node.textContent.trim() !== '') {
              const span = document.createElement('span');
              span.classList.add('description-of-training-desc')
              span.textContent = node.textContent.trim();
              newContent.appendChild(span);
            }
          } else if (node.nodeType === Node.ELEMENT_NODE) {
            // Если узел элемент (например, <b>), просто добавляем его
            newContent.appendChild(node.cloneNode(true));
          }
        });

        // Очищаем содержимое элемента и добавляем новый контент
        t.innerHTML = ''; // Очищаем текущее содержимое
        t.appendChild(newContent); // Добавляем новое содержимое
      });
    }

    // ТРЕНИНГ: перестройка DOM с учетом description-of-training

    const trainingsListLinks = document.querySelectorAll('.xdget-trainingList .stream-table td a')

    if (trainingsListLinks) {
      trainingsListLinks.forEach(anchor => {
        // Находим элементы по их классам
        const imageDiv = anchor.querySelector('.image');
        const titleDiv = anchor.querySelector('.stream-title');
        const descriptionDiv = anchor.querySelector('.description-of-training');

        // Проверяем, что все необходимые элементы существуют
        if (imageDiv && titleDiv && descriptionDiv) {
          // Создаем новый div с классом stream-info
          const streamInfoDiv = document.createElement('div');
          streamInfoDiv.classList.add('stream-info');

          // Перемещаем stream-title и description-of-training внутрь stream-info
          streamInfoDiv.appendChild(titleDiv);
          streamInfoDiv.appendChild(descriptionDiv);

          // Вставляем stream-info после image
          imageDiv.after(streamInfoDiv);
        } else {
          console.warn('Не удалось найти один или несколько элементов: .image, .stream-title, или .description-of-training');
        }
      });
    }

    // ТРЕНИНГ: Добавление скобок внутри тега <b> и удаление точки в конце текста в элементе с классом "description-of-training"
    const descriptionOfTraining = document.querySelectorAll('.description-of-training')

    if (descriptionOfTraining) {
      descriptionOfTraining.forEach(description => {
        // Находим тег <b> внутри description-of-training
        const boldTag = description.querySelector('b');
        if (boldTag) {
          // Получаем текст внутри <b>
          let text = boldTag.textContent.trim();

          // Удаляем точку в конце текста, если она есть
          if (text.endsWith('.')) {
            text = text.slice(0, -1);
          }

          // Добавляем [ и ] вокруг текста внутри <b>
          boldTag.textContent = `[ ${text} ]`;
        }
      });
    }

    // ТРЕНИНГ: Функция для получения правильного склонения слова "урок"
    function getLessonWord(number) {
      const lastDigit = number % 10;
      const lastTwoDigits = number % 100;

      // Правила склонения: если число заканчивается на 11-19, используем "уроков"
      if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
        return 'уроков';
      }

      // Правила склонения для чисел, оканчивающихся на 1, 2-4, 5 и более
      if (lastDigit === 1) {
        return 'урок';
      } else if (lastDigit >= 2 && lastDigit <= 4) {
        return 'урока';
      } else {
        return 'уроков';
      }
    }

    // ТРЕНИНГ: Функция для суммирования количества уроков

    function countLessons() {
      // Найдем все элементы с классом 'description-of-training'
      const lessonElements = document.querySelectorAll('.description-of-training');

      let totalLessons = 0;

      // Пройдемся по каждому элементу и извлечем количество уроков
      lessonElements.forEach(element => {
        // Извлекаем текст из элемента, например "4 урока"
        const text = element.textContent;

        // Используем регулярное выражение для извлечения числа из строки
        const lessonCount = parseInt(text.match(/\d+/));

        // Если число найдено, прибавляем его к общему количеству уроков
        if (!isNaN(lessonCount)) {
          totalLessons += lessonCount;
        }
      });

      // Найдем элемент с классом 'banner-2' и вставим туда результат
      const banner = document.querySelector('.banner-2-count');
      if (banner) {
        const lessonWord = getLessonWord(totalLessons);
        banner.textContent = `[ ${totalLessons} ${lessonWord} ]`;
      }
    }

    countLessons();

    // ТРЕНИНГ: для подсчета времени обратной связи и круса
    // Функция для вычисления количества оставшихся дней
    function calculateDaysRemaining(deadline) {
      const [day, month, year] = deadline.split('/');
      const deadlineDate = new Date(`20${year}-${month}-${day}`); // Преобразуем в формат YYYY-MM-DD

      // Проверяем, корректно ли создан объект даты
      if (isNaN(deadlineDate)) {
        console.error("Неверный формат даты:", deadline);
        return null;
      }

      const currentDate = new Date();
      const timeDifference = deadlineDate - currentDate;

      // Переводим миллисекунды в дни и округляем до целого значения
      return Math.ceil(timeDifference / (1000 * 60 * 60 * 24));
    }

    // Обновление текста элемента
    function updateDeadlineElement(selector, daysRemaining) {
      const element = document.querySelector(selector);
      if (element) {
        if (daysRemaining === null) {
          element.textContent = 'Ошибка в дате';
        } else {
          element.textContent = daysRemaining > 0
            ? `${daysRemaining}`
            : '0';
        }
      }
    }

    // Получаем дату из h2 с классом feedback-deadline
    const feedbackDeadlineHeader = document.querySelector('h2.feedback-deadline')
    if (feedbackDeadlineHeader) {
      const feedbackDeadlineText = feedbackDeadlineHeader.textContent.trim();
      const feedbackDaysRemaining = calculateDaysRemaining(feedbackDeadlineText);
      updateDeadlineElement('.feedback-deadline-output', feedbackDaysRemaining);
    }

    // Находим первый элемент с классом "user-product-block"
    const userProductBlock = document.querySelector(".user-product-block");

    // Если элемент найден, продолжаем
    if (userProductBlock) {
      // Извлекаем текст из блока
      const text = userProductBlock.textContent;

      // Используем регулярное выражение для поиска числа
      const match = text.match(/(\d+)/);

      if (match) {
        const daysLeft = match[1]; // Извлеченное число

        // Находим элемент с классом "course-deadline-output" внутри текущего блока
        const deadlineOutput = userProductBlock.querySelector(".course-deadline-output");

        // Если элемент найден, вставляем число в него
        if (deadlineOutput) {
          deadlineOutput.textContent = daysLeft;
        } else {
          console.error("Элемент с классом course-deadline-output не найден.");
        }
      } else {
        console.error("Не удалось найти число в тексте блока.");
      }
    } else {
      console.error("Блок с классом user-product-block не найден.");
    }

    // Получаем дату из h2 с классом course-deadline
    // const courseDeadlineHeader = document.querySelector('h2.course-deadline')
    // if(courseDeadlineHeader) {
    //   const courseDeadlineText = courseDeadlineHeader.textContent.trim();
    //   const courseDaysRemaining = calculateDaysRemaining(courseDeadlineText);
    //   updateDeadlineElement('.course-deadline-output', courseDaysRemaining);
    // }


    // СПИСОК УРОКОВ: 
    // Находим элемент формы внутри элемента с классом xdget-lessonList
    const lessonListForm = document.querySelector('.xdget-lessonList form');

    // Проверяем, существует ли форма
    if (lessonListForm) {
      // Проверяем, содержит ли форма что-то кроме input type="hidden"
      const hasNonHiddenElements = Array.from(lessonListForm.children).some(child =>
        !(child.tagName === 'INPUT' && child.type === 'hidden')
      );

      if (lessonListForm.innerHTML.trim() !== '' && hasNonHiddenElements) {
        // Добавляем класс для тега <html>
        document.documentElement.classList.add('lessons-list-page');
      }
    }



    // УРОК: Убрать "доступен"
    const label = document.querySelector('.center-block .lesson-header-block .lesson-navigation table td.text-center .user-state-reached .user-state-label');
    const labelWrapper = document.querySelector('.center-block .lesson-header-block .lesson-navigation table td.text-center .user-state-reached');

    if (label && label.textContent.includes('Доступен')) {

      labelWrapper.style.display = 'none';

    }

    // УРОК: Добавить класс "expanded" на заголовок
    const headerOfExpandList = document.querySelectorAll('.o-lt-text-header-expand .header')

    headerOfExpandList.forEach(header => {
      header.addEventListener('click', () => {
        header.classList.toggle('expanded')
      })
    })

    // УРОК: Добавить класс "expanded" на заголовок
    const lessonNavTd = document.querySelectorAll('.center-block .lesson-header-block .lesson-navigation table tr td');

    if (lessonNavTd.length > 0) {
      // Проверяем, пустой ли первый элемент
      const firstTd = lessonNavTd[0];
      if (firstTd.textContent.trim() === '') {
        // Если первый элемент пустой, находим последний элемент и добавляем ему класс
        const lastTd = lessonNavTd[lessonNavTd.length - 1];
        lastTd.classList.add('first-is-empty');
      }

      // Добавляем класс 'empty' ко всем пустым ячейкам
      lessonNavTd.forEach(function (td) {
        if (td.textContent.trim() === '') {
          td.classList.add('empty');
        }
      });
    }

    // УРОК: убрать скругления у кнопок
    // Находим все элементы, которые соответствуют селектору
    // const buttons = document.querySelectorAll('.html-page-lesson .center-block .o-lt-onecolumn button.btn.f-btn[type=button]');

    // if (buttons) {
    //   buttons.forEach(button => {
    //     button.style.borderRadius = ''; // Убираем стиль
    //   });
    // }


    // УРОК: Общий класс для страницы урока
    if (location.pathname.match(/teach\/control\/lesson\/view/) != null) { // Для страницы Статистики уроков
      document.documentElement.classList.add('html-page-lesson');

      // УВЕДОМЛЕНИЯ: checkbox
      let checkableInput = document.querySelectorAll('input[type="checkbox"]');
      if (checkableInput && window.controllerId !== "page") {
        for (let index = 0; index < checkableInput.length; index++) {
          const input = checkableInput[index];
          if (input.closest('.gw-check-input') || input.closest('#training-form') || input.closest('#testingEditor')) continue;
          const element = document.createElement('div');
          element.classList.add('gw-check-input');
          $(input).before(element);
          element.appendChild(input);
          element.innerHTML += '<div class="gw-check-input__box"></div>';
          let newInput = element.querySelector('input');

          if (newInput.checked) element.classList.add('js-active');
          else element.classList.remove('js-active');

          newInput.addEventListener('change', function () {
            // input.checked = !input.checked;
            if (newInput.checked) element.classList.add('js-active');
            else element.classList.remove('js-active');
          })
        }
      }
    }

    const buttons = document.querySelectorAll('.o-lt-onecolumn button.btn.f-btn[type=button]');

    if (buttons) {
      buttons.forEach(button => {
        button.style.borderRadius = ''; // Убираем стиль
      });
    }

    document.querySelectorAll(".o-lt-lesson-files .files-table tbody tr").forEach(row => {
      row.addEventListener("click", function () {
        const link = row.querySelector("a");
        if (link) {
          window.open(link.href, "_blank");
        }
      });
    });

  }
})

